//
//  WBAccountModel.swift
//  GitWeibo
//
//  Created by 胡金东 on 2017/6/1.
//  Copyright © 2017年 胡金东. All rights reserved.
//

import UIKit


private let accountPath :NSString = "userAccount.json"

class WBAccountModel: NSObject {
    /// - 访问令牌
    var access_token: String?
    /// - 用户Uid
    var uid : String?
    /// - access_token的生命周期，单位秒数
    /// -登录过期时间，double类型，要给默认值0
    /// - 开发者 5年,每次登录都是5年
    /// - 使用者 3天过期,会从第一次登录开始递减
    var expires_in : TimeInterval = 0{
        didSet{
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    /// - 用户昵称
    var screen_name:String?
    /// - 用户头像地址
    var avatar_large: String?
    
    override init() {
        super.init()
        /// - 从磁盘中获取保存用户信息
        /// - 加载保存数据到二进制文件，如果失败直接返回
        guard let path = accountPath.cz_appendDocumentDir(),
              let data = NSData(contentsOfFile: path),
        let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String :Any]
              else {
                    return
        }
        
    /// -2. 使用字典设置属性值
        yy_modelSet(with: dict ?? [:])
      /// - 3.判断 token 是否过期
//        expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
        /// - orderedDescending 下降 expiresDate小于当前时间（Date()）token过期
        if expiresDate?.compare(Date()) != .orderedDescending {
            
            /// - 登录过期，清空token
           access_token = nil
           uid = nil
            /// - 删除账户文件
         _ =  try? FileManager.default.removeItem(atPath: path)
            
        }
        
    }
    
    var expiresDate: Date?
    
    override var description: String{
        return yy_modelDescription()
    }
    /**
     1.偏好设置(小) 
     2.沙盒- 归档/plist/json
     3.数据库（FMDB/CoreData）
     4.钥匙串访问（小/自动加密 - 需要使用框架 SSKeychain）
     */
    func saveAccount()  {
        /// - 1.模型转字典
        var dict = (self.yy_modelToJSONObject() as? [String:Any]) ?? [:]
        /// - 需要删除 expires_in 值
        dict.removeValue(forKey: "expires_in")
        
        /// - 2.字典序列化
        
      guard  let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
             let filePath = accountPath.cz_appendDocumentDir() else{
                
             return
        }
        /// - 写入磁盘 (data as NSData)转成oc类型
        (data as NSData).write(toFile: filePath, atomically: true)
        print("用户账户保存成功\(filePath)")
        
    }

}
